//package com.aiks.dsyncpluginspringbootautoconfigure.plugin.module.dept;
//
//
//import com.aiks.dsyncpluginspringbootautoconfigure.ClientDeptService;
//import com.aiks.dsyncpluginspringbootautoconfigure.enums.ModuleTypeEnum;
//import com.aiks.dsyncpluginspringbootautoconfigure.enums.PluginEnum;
//import com.aiks.dsyncpluginspringbootautoconfigure.plugin.AbstractFunctionPlugin;
//import com.aiks.dsyncpluginspringbootautoconfigure.plugin.module.DeptModule;
//import com.aiks.dsyncpluginspringbootautoconfigure.pojo.ModuleConfigEntity;
//import com.aiks.dsyncpluginspringbootautoconfigure.pojo.SaasDeptDTO;
//import com.aiks.dsyncpluginspringbootautoconfigure.pojo.ServerSyncReq;
//import com.aiks.dsyncpluginspringbootautoconfigure.pojo.mongodb.MongoDbMsg;
//import com.google.common.collect.Lists;
//import org.springframework.context.ApplicationEventPublisher;
//
//import java.util.List;
//
///**
// * 部门落地插件.
// *
// * @author <a href="mailto:yuanz@yxt.com">yuanz</a>
// * @date 2022-06-28 14:24
// * @since 1Abst
// **/
//public class DeptLandingFunctionPlugin extends AbstractFunctionPlugin<SaasDeptDTO> implements DeptModule {
//
//    /**
//     * getPluginEnum.
//     *
//     * @return PluginEnum
//     */
//    @Override
//    public PluginEnum getPluginEnum() {
//        return PluginEnum.DeptLandingFunctionPlugin;
//    }
//
//    /**
//     * handle.
//     *
//     * @param moduleConfig moduleConfig
//     * @param saasData     saasData
//     * @param clientDatas  clientDatas
//     */
//    @Override
//    protected void handle(final ModuleConfigEntity moduleConfig, final List<SaasDeptDTO> saasData,
//                          final List<Object> clientDatas) {
//        String orgId = moduleConfig.getOrgId();
//        ClientDeptService clientDeptService = SpringContext.getAppContext().getBean(ClientDeptService.class);
//        if (moduleConfig.getAlldata()) {
//            clientDeptService.initClientDept(orgId, saasData);
//        } else {
//            clientDeptService.saveClientDept(orgId, saasData);
//        }
//        // 部门全部同步完，排序后，执行后续插件
//        if (moduleConfig.getLastdata() && null != getNext()) {
//            clientDeptService.updateDeptLevel(orgId);
//            int startPosition = 0;
//            int pageSize = saasData.size();
//            while (true) {
//                List<ClientDeptDO> clientDeptDOS = clientDeptService.pageQuery(orgId, startPosition,
//                    pageSize);
//                if (clientDeptDOS.size() == 0) {
//                    break;
//                } else {
//                    startPosition += pageSize;
//                }
//                List<SaasDeptDTO> newSaasData = BeanCopyUtils.copy(clientDeptDOS, SaasDeptDTO.class);
//                saasData.clear();
//                saasData.addAll(newSaasData);
//                if (null != getNext()) {
//                    getNext().execute(moduleConfig, newSaasData, Lists.newArrayList());
//                }
//                if (newSaasData.size() > 0) {
//                    // 更新redis同步数量(插件过滤完调用)
//                    SpringContext.getAppContext().getBean(ModuleService.class)
//                        .updateModuleNeedCount(orgId, moduleConfig.getLastdata(), moduleConfig.getDatacode(),
//                            ModuleTypeEnum.dept.getValue(), Long.valueOf(newSaasData.size()));
//                    // 记录日志
//                    JsonService jsonService = SpringContext.getAppContext().getBean(JsonService.class);
//                    ApplicationEventPublisher applicationEventPublisher =
//                        SpringContext.getAppContext().getBean(ApplicationEventPublisher.class);
//                    SyncMongoDbMsgApplicationEvent syncMongoDbMsgApplicationEvent =
//                        new SyncMongoDbMsgApplicationEvent(MongoDbMsg.builder(orgId, jsonService.toJsonString(newSaasData),
//                            "handleDept", moduleConfig.getDatacode()));
//                    applicationEventPublisher.publishEvent(syncMongoDbMsgApplicationEvent);
//                    // 处理部门同步数据
//                    SpringContext.getAppContext().getBean(ServerDeptService.class)
//                        .handleUpdateDept(ServerSyncReq.<SaasDeptDTO>builder()
//                            .orgId(orgId).data(newSaasData)
//                            .dataCode(moduleConfig.getDatacode()).build());
//                }
//            }
//        }
//    }
//}
//
